package demo;

import java.util.LinkedList;

public class Test {
    public static void main(String[] args) {
        // 一道阿里的面试题：
        Integer a = 100;
        Integer b = 100;
        System.out.println(a==b);  //结果true
        Integer a1 = 200;  //这个地方发生了装箱 ， 会调用valueOf()
        // 进入到Integer里面的valueOf()；会看到要先确定参数i的范围 [low,high] 数值在这个里面的话会认为相等
        // low = -128      high = 127
        //在这范围内会有一个数组cache  [-128            0             127] //存了256个数字
        //下标 = 这个范围的值+128

        //不在的话会new一个新的对象 ， 用 == 比较两个对象的话是错误的
        Integer b1 = 200;
        System.out.println(a1==b1);  //结果false
        //为什么会有这样的情况呢?
    }
    public static void main2(String[] args) {
        //****装箱/拆包   拆箱/拆包****
        //装箱：把基本数据类型 变为对应的包装类型
        int a = 10;  //这是一个基本数据类型
        Integer value = a ;  // 把a变成类，这一句就是装箱 ，也是自动装箱
        //也可以这样写
        Integer val = Integer.valueOf(a); //显示装箱
        Integer val2 = new Integer(a); //显示装箱
        System.out.println(value);


        Integer val11 = 10;
        int b = val11;   //拆箱 ， 把引用类型 拆箱成为了基本数据类型
        System.out.println(b);
        int b1 = val11.intValue(); // 显示拆箱
        System.out.println(b1);
        //也可以拆箱称为其他类型
        double d1 = val11.doubleValue(); //拆箱称为double类型

    }
    public static void main1(String[] args) {
        //****包装类****
        //
        LinkedList<String> linkedList = new LinkedList<>();
        linkedList.add("hello");
        //linkedList.add(10); //这是错误的

        // 这里面<>里面的意思就是指定你要放什么类型的数据
        //而且里面只能写包装类
        // 如 你要想写 int 类型 里面只能写 Integer
        LinkedList<Integer> linkedList1 = new LinkedList<>();
        //每一个基本数据类型有对应的包装类
        // int -- Integer
        // char -- Character
        //其余的都是其首字符大写
    }
}
